package com.ruoyi.system.service.impl;

import java.util.Date;
import java.util.List;

import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.BusinessException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.uuid.UUID;
import com.ruoyi.system.domain.SysFloor;
import com.ruoyi.system.mapper.SysFloorMapper;
import com.ruoyi.system.service.ISysFloorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 楼层管理信息Service业务层处理
 *
 * @author zmz
 * @date 2021-08-22
 */
@Service
public class SysFloorServiceImpl implements ISysFloorService
{
    @Autowired(required = false)
    private SysFloorMapper SysFloorMapper;

    /**
     * 查询楼层管理信息
     *
     * @param floorId 楼层管理信息ID
     * @return 楼层管理信息
     */
    @Override
    public SysFloor selectSysFloorById(String floorId)
    {
        return SysFloorMapper.selectSysFloorById(floorId);
    }

    /**
     * 查询楼层管理信息
     *
     * @param floorName 楼层管理信息ID
     * @return 楼层管理信息
     */
    @Override
    public SysFloor selectSysFloorByName(String floorName)
    {
        return SysFloorMapper.selectSysFloorByName(floorName);
    }

    /**
     * 查询楼层管理信息列表
     *
     * @param SysFloor 楼层管理信息
     * @return 楼层管理信息
     */
    @Override
    public List<SysFloor> selectSysFloorList(SysFloor SysFloor)
    {
        return SysFloorMapper.selectSysFloorList(SysFloor);
    }

    /**
     * 查询楼层管理信息列表
     *
     * @param SysFloor 楼层管理信息
     * @return 楼层管理信息
     */
    @Override
    public List<SysFloor> selectSysFloorListAll(SysFloor SysFloor)
    {
        return SysFloorMapper.selectSysFloorListAll(SysFloor);
    }

    /**
     * 根据证件号判断该证件号是否已存在
     * @param floorName
     * @return
     */
    @Override
    public boolean checkfloorNameExist(String floorName){
        return SysFloorMapper.checkfloorNameExist(floorName);
    }

    /**
     * 楼层管理基础信息
     *
     * @param SysFloor 员工基础信息
     * @return 结果
     */
    @Override
    public int insertSysFloor(SysFloor SysFloor)
    {
        return SysFloorMapper.insertSysFloor(SysFloor);
    }

    /**
     * 修改楼层管理信息
     *
     * @param SysFloor 楼层管理信息
     * @return 结果
     */
    @Override
    public int updateSysFloor(SysFloor SysFloor)
    {
        return SysFloorMapper.updateSysFloor(SysFloor);
    }

    /**
     * 删除员工基础信息对象
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteFloornfoByIds(String[] ids)
    {
        return SysFloorMapper.deleteSysFloorByIds(ids);
    }

    /**
     *校验Excel数据是否满足条件
     *
     * @param lists
     * @return
     */
    @Override
    public String validateDatas(List<SysFloor> lists) {
        StringBuilder sb =new StringBuilder();
        if (StringUtils.isEmpty(lists)){
            sb.append("execel中无任何数据，请认证填写！");
        }else {
            for (int i = 0; i <lists.size() ; i++) {
                if (StringUtils.isBlank(lists.get(i).getFloorName())){
                    sb.append("第"+(i+1)+"行"+"、姓名不符合标准！<br/>");
                }

            }
        }
        if (sb.length()>0){
            return sb.toString();
        };
        return "";
    }

    /**
     * 导入楼层信息
     * @param lists
     * @param updateSupport
     * @param sysUser
     * @return
     */
    @Override
    public String importSysFloor(List<SysFloor> lists, boolean updateSupport, SysUser sysUser) {
        int successNum = 0;
        int failureNum = 0;
        StringBuffer successMsg = new StringBuffer();
        StringBuffer failureMsg = new StringBuffer();
        for (SysFloor sb:lists){
            sb.setFloorId(UUID.randomUUID().toString().replace("-",""));
            sb.setUpdatetime(new Date());
            try {
                //验证是否存在这个楼层信息
                SysFloor SysFloor = SysFloorMapper.selectSysFloorByName(sb.getFloorName());
                if (StringUtils.isNull(SysFloor)){
                    SysFloorMapper.insertSysFloor(sb);
                    successNum++;
                    successMsg.append("<br/>"+successNum+"、"+sb.getFloorName()+"导入成功");
                }else if (updateSupport){
                    SysFloorMapper.updateSysFloor(sb);
                    successNum++;
                    successMsg.append("<br/>"+successNum+"、"+sb.getFloorName()+"更新成功");
                }else{
                    failureNum++;
                    failureMsg.append("<br/>"+failureNum+"、"+sb.getFloorName()+"已存在");
                }
            }catch (Exception e){
                failureNum ++;
                failureMsg.append("<br/>"+failureNum+"、导入失败");
            }
        }
        if(failureNum > 0){
            failureMsg.insert(0, "很抱歉，导入失败！共"+failureNum+"条数据格式不正确，错误如下：");
            throw new BusinessException(failureMsg.toString());
        }else {
            successMsg.insert(0, "恭喜您数据已全部导入成功！共"+ successNum +"条，数据如下：");
        }
        return successMsg.toString();
    }

    /**
     * 查询员工基础信息列表
     *
     * @param floorIds 员工基础信息
     * @return 员工基础信息集合
     */
    public List<SysFloor> selectSysFloorListByIds(String[] floorIds){
        return SysFloorMapper.selectSysFloorListByIds(floorIds);
    }

}
